home *** CD-ROM | disk | FTP | other *** search
/ Sky at Night 2007 June / SAN CD 6-2007 CD-ROM 25.iso / pc / Software / AstroGrav_Win / Java / jre1.6.0 / lib / rt.jar / javax / script / ScriptEngineManager.class (.txt) < prev    next >
Encoding:
Java Class File  |  2006-11-29  |  5.6 KB  |  291 lines

  1. package javax.script;
  2.  
  3. import java.security.AccessController;
  4. import java.util.ArrayList;
  5. import java.util.Collections;
  6. import java.util.HashMap;
  7. import java.util.HashSet;
  8. import java.util.List;
  9. import sun.misc.Service;
  10. import sun.misc.ServiceConfigurationError;
  11. import sun.reflect.Reflection;
  12. import sun.security.util.SecurityConstants;
  13.  
  14. public class ScriptEngineManager {
  15.    private static final boolean DEBUG = false;
  16.    private HashSet<ScriptEngineFactory> engineSpis;
  17.    private HashMap<String, ScriptEngineFactory> nameAssociations;
  18.    private HashMap<String, ScriptEngineFactory> extensionAssociations;
  19.    private HashMap<String, ScriptEngineFactory> mimeTypeAssociations;
  20.    private Bindings globalScope;
  21.  
  22.    public ScriptEngineManager() {
  23.       ClassLoader var1 = Thread.currentThread().getContextClassLoader();
  24.       if (this.canCallerAccessLoader(var1)) {
  25.          this.init(var1);
  26.       } else {
  27.          this.init((ClassLoader)null);
  28.       }
  29.  
  30.    }
  31.  
  32.    public ScriptEngineManager(ClassLoader var1) {
  33.       this.init(var1);
  34.    }
  35.  
  36.    private void init(ClassLoader var1) {
  37.       this.globalScope = new SimpleBindings();
  38.       this.engineSpis = new HashSet();
  39.       this.nameAssociations = new HashMap();
  40.       this.extensionAssociations = new HashMap();
  41.       this.mimeTypeAssociations = new HashMap();
  42.       AccessController.doPrivileged(new 1(this, var1));
  43.    }
  44.  
  45.    private void initEngines(ClassLoader var1) {
  46.       Object var2 = null;
  47.  
  48.       try {
  49.          if (var1 != null) {
  50.             var7 = Service.providers(ScriptEngineFactory.class, var1);
  51.          } else {
  52.             var7 = Service.installedProviders(ScriptEngineFactory.class);
  53.          }
  54.       } catch (ServiceConfigurationError var5) {
  55.          System.err.println("Can't find ScriptEngineFactory providers: " + var5.getMessage());
  56.          return;
  57.       }
  58.  
  59.       try {
  60.          while(var7.hasNext()) {
  61.             try {
  62.                ScriptEngineFactory var3 = (ScriptEngineFactory)var7.next();
  63.                this.engineSpis.add(var3);
  64.             } catch (ServiceConfigurationError var4) {
  65.                System.err.println("ScriptEngineManager providers.next(): " + var4.getMessage());
  66.             }
  67.          }
  68.  
  69.       } catch (ServiceConfigurationError var6) {
  70.          System.err.println("ScriptEngineManager providers.hasNext(): " + var6.getMessage());
  71.       }
  72.    }
  73.  
  74.    public void setBindings(Bindings var1) {
  75.       if (var1 == null) {
  76.          throw new IllegalArgumentException("Global scope cannot be null.");
  77.       } else {
  78.          this.globalScope = var1;
  79.       }
  80.    }
  81.  
  82.    public Bindings getBindings() {
  83.       return this.globalScope;
  84.    }
  85.  
  86.    public void put(String var1, Object var2) {
  87.       this.globalScope.put(var1, var2);
  88.    }
  89.  
  90.    public Object get(String var1) {
  91.       return this.globalScope.get(var1);
  92.    }
  93.  
  94.    public ScriptEngine getEngineByName(String var1) {
  95.       if (var1 == null) {
  96.          throw new NullPointerException();
  97.       } else {
  98.          Object var2;
  99.          if (null != (var2 = this.nameAssociations.get(var1))) {
  100.             ScriptEngineFactory var3 = (ScriptEngineFactory)var2;
  101.  
  102.             try {
  103.                ScriptEngine var13 = var3.getScriptEngine();
  104.                var13.setBindings(this.getBindings(), 200);
  105.                return var13;
  106.             } catch (Exception var11) {
  107.             }
  108.          }
  109.  
  110.          for(ScriptEngineFactory var4 : this.engineSpis) {
  111.             List var5 = null;
  112.  
  113.             try {
  114.                var5 = var4.getNames();
  115.             } catch (Exception var9) {
  116.             }
  117.  
  118.             if (var5 != null) {
  119.                for(String var7 : var5) {
  120.                   if (var1.equals(var7)) {
  121.                      try {
  122.                         ScriptEngine var8 = var4.getScriptEngine();
  123.                         var8.setBindings(this.getBindings(), 200);
  124.                         return var8;
  125.                      } catch (Exception var10) {
  126.                      }
  127.                   }
  128.                }
  129.             }
  130.          }
  131.  
  132.          return null;
  133.       }
  134.    }
  135.  
  136.    public ScriptEngine getEngineByExtension(String var1) {
  137.       if (var1 == null) {
  138.          throw new NullPointerException();
  139.       } else {
  140.          Object var2;
  141.          if (null != (var2 = this.extensionAssociations.get(var1))) {
  142.             ScriptEngineFactory var3 = (ScriptEngineFactory)var2;
  143.  
  144.             try {
  145.                ScriptEngine var13 = var3.getScriptEngine();
  146.                var13.setBindings(this.getBindings(), 200);
  147.                return var13;
  148.             } catch (Exception var11) {
  149.             }
  150.          }
  151.  
  152.          for(ScriptEngineFactory var4 : this.engineSpis) {
  153.             List var5 = null;
  154.  
  155.             try {
  156.                var5 = var4.getExtensions();
  157.             } catch (Exception var9) {
  158.             }
  159.  
  160.             if (var5 != null) {
  161.                for(String var7 : var5) {
  162.                   if (var1.equals(var7)) {
  163.                      try {
  164.                         ScriptEngine var8 = var4.getScriptEngine();
  165.                         var8.setBindings(this.getBindings(), 200);
  166.                         return var8;
  167.                      } catch (Exception var10) {
  168.                      }
  169.                   }
  170.                }
  171.             }
  172.          }
  173.  
  174.          return null;
  175.       }
  176.    }
  177.  
  178.    public ScriptEngine getEngineByMimeType(String var1) {
  179.       if (var1 == null) {
  180.          throw new NullPointerException();
  181.       } else {
  182.          Object var2;
  183.          if (null != (var2 = this.mimeTypeAssociations.get(var1))) {
  184.             ScriptEngineFactory var3 = (ScriptEngineFactory)var2;
  185.  
  186.             try {
  187.                ScriptEngine var13 = var3.getScriptEngine();
  188.                var13.setBindings(this.getBindings(), 200);
  189.                return var13;
  190.             } catch (Exception var11) {
  191.             }
  192.          }
  193.  
  194.          for(ScriptEngineFactory var4 : this.engineSpis) {
  195.             List var5 = null;
  196.  
  197.             try {
  198.                var5 = var4.getMimeTypes();
  199.             } catch (Exception var9) {
  200.             }
  201.  
  202.             if (var5 != null) {
  203.                for(String var7 : var5) {
  204.                   if (var1.equals(var7)) {
  205.                      try {
  206.                         ScriptEngine var8 = var4.getScriptEngine();
  207.                         var8.setBindings(this.getBindings(), 200);
  208.                         return var8;
  209.                      } catch (Exception var10) {
  210.                      }
  211.                   }
  212.                }
  213.             }
  214.          }
  215.  
  216.          return null;
  217.       }
  218.    }
  219.  
  220.    public List<ScriptEngineFactory> getEngineFactories() {
  221.       ArrayList var1 = new ArrayList(this.engineSpis.size());
  222.  
  223.       for(ScriptEngineFactory var3 : this.engineSpis) {
  224.          var1.add(var3);
  225.       }
  226.  
  227.       return Collections.unmodifiableList(var1);
  228.    }
  229.  
  230.    public void registerEngineName(String var1, ScriptEngineFactory var2) {
  231.       if (var1 != null && var2 != null) {
  232.          this.nameAssociations.put(var1, var2);
  233.       } else {
  234.          throw new NullPointerException();
  235.       }
  236.    }
  237.  
  238.    public void registerEngineMimeType(String var1, ScriptEngineFactory var2) {
  239.       if (var1 != null && var2 != null) {
  240.          this.mimeTypeAssociations.put(var1, var2);
  241.       } else {
  242.          throw new NullPointerException();
  243.       }
  244.    }
  245.  
  246.    public void registerEngineExtension(String var1, ScriptEngineFactory var2) {
  247.       if (var1 != null && var2 != null) {
  248.          this.extensionAssociations.put(var1, var2);
  249.       } else {
  250.          throw new NullPointerException();
  251.       }
  252.    }
  253.  
  254.    private boolean canCallerAccessLoader(ClassLoader var1) {
  255.       SecurityManager var2 = System.getSecurityManager();
  256.       if (var2 != null) {
  257.          ClassLoader var3 = this.getCallerClassLoader();
  258.          if (var3 != null && (var1 != var3 || !this.isAncestor(var1, var3))) {
  259.             try {
  260.                var2.checkPermission(SecurityConstants.GET_CLASSLOADER_PERMISSION);
  261.             } catch (SecurityException var5) {
  262.                return false;
  263.             }
  264.          }
  265.       }
  266.  
  267.       return true;
  268.    }
  269.  
  270.    private ClassLoader getCallerClassLoader() {
  271.       Class var1 = Reflection.getCallerClass(3);
  272.       return var1 == null ? null : var1.getClassLoader();
  273.    }
  274.  
  275.    private boolean isAncestor(ClassLoader var1, ClassLoader var2) {
  276.       do {
  277.          var2 = var2.getParent();
  278.          if (var1 == var2) {
  279.             return true;
  280.          }
  281.       } while(var2 != null);
  282.  
  283.       return false;
  284.    }
  285.  
  286.    // $FF: synthetic method
  287.    static void access$000(ScriptEngineManager var0, ClassLoader var1) {
  288.       var0.initEngines(var1);
  289.    }
  290. }
  291.